package top.lixunda.ecommerce.server.user.api.entity.vo;

import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.springframework.beans.BeanUtils;
import top.lixunda.common.utils.ObjectValidators;
import top.lixunda.ecommerce.server.user.api.entity.db.SystemMenuDO;
import top.lixunda.ecommerce.server.user.api.entity.db.UserMenuDO;

import java.util.List;
import java.util.stream.Collectors;

/**
 * 系统菜单目录表VO
 *
 * @author lixunda
 * @version time:2020/4/23 17:15
 */
@SuppressWarnings({"WeakerAccess", "unused"})
@ApiModel("系统菜单目录表VO")
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class SystemMenuVO {

    /**
     * 菜单编号
     */
    @ApiModelProperty("菜单编号")
    private Integer menuId;

    /**
     * 菜单名称
     */
    @ApiModelProperty("菜单名称")
    private String menuName;

    /**
     * 菜单图标
     */
    @ApiModelProperty("菜单图标")
    private String menuIcon;

    /**
     * 菜单编码
     */
    @ApiModelProperty("菜单编码")
    private String menuCode;

    /**
     * 菜单链接路径
     */
    @ApiModelProperty("菜单链接路径")
    private String menuUrl;

    /**
     * 排序字段，小数在前
     */
    @ApiModelProperty("排序字段，小数在前")
    private Integer menuOrder;

    /**
     * 菜单描述
     */
    @ApiModelProperty("菜单描述")
    private String menuDesc;

    /**
     * 父节点编号，第一级节点为子系统短码
     */
    @ApiModelProperty("父节点编号，第一级节点为子系统短码")
    private Integer parentMenuId;

    /**
     * 转换数据
     *
     * @param systemMenuDO SystemMenuDO
     * @return SystemMenuVO
     */
    @ApiModelProperty(hidden = true)
    @JsonIgnore
    public static SystemMenuVO fromSystemMenuDO(SystemMenuDO systemMenuDO) {
        if (ObjectValidators.isEmpty(systemMenuDO)) {
            return null;
        }
        SystemMenuVO systemMenuVO = new SystemMenuVO();
        BeanUtils.copyProperties(systemMenuDO, systemMenuVO);
        return systemMenuVO;
    }

    /**
     * 转换数据
     *
     * @param list SystemMenuDO列表
     * @return SystemMenuVO列表
     */
    @ApiModelProperty(hidden = true)
    @JsonIgnore
    public static List<SystemMenuVO> fromSystemMenuDO(List<SystemMenuDO> list) {
        if (list == null) {
            return null;
        }
        return list.stream()
                .map(SystemMenuVO::fromSystemMenuDO)
                .collect(Collectors.toList());
    }

    /**
     * 转换数据
     *
     * @param userMenuDO UserMenuDO
     * @return SystemMenuVO
     */
    @ApiModelProperty(hidden = true)
    @JsonIgnore
    public static SystemMenuVO fromUserMenuDO(UserMenuDO userMenuDO) {
        if (ObjectValidators.isEmpty(userMenuDO)) {
            return null;
        }
        SystemMenuVO systemMenuVO = new SystemMenuVO();
        BeanUtils.copyProperties(userMenuDO, systemMenuVO);
        return systemMenuVO;
    }

    /**
     * 转换数据
     *
     * @param list UserMenuDO列表
     * @return SystemMenuVO列表
     */
    @ApiModelProperty(hidden = true)
    @JsonIgnore
    public static List<SystemMenuVO> fromUserMenuDO(List<UserMenuDO> list) {
        if (list == null) {
            return null;
        }
        return list.stream()
                .map(SystemMenuVO::fromUserMenuDO)
                .collect(Collectors.toList());
    }

}
